# -*- coding: utf-8 -*-
"""
Created on Fri Aug  4 20:12:36 2023

@author: skunk69
"""

import json

chinese_name = u'Achenbach儿童行为量表（父母问卷）'
english_name = 'Achenbach Child Behavior Check List (Parent Questionnaire)'
abbreviation = 'CBCL'
category = u'一般心理健康与行为问题量表'

outline = u"""Achenbach儿童行为量表(Child Behavior Check List，CBCL)系美国心理学家Achenbach T. M. 和Edelbrock C. 于1976年编制。1983年修订的父母用儿童行为量表是一个评定儿童光谱的行为和情绪问题及社会能力的量表。该版本内容十分全面、详尽，缺点是计分十分复杂，不利于不同年龄不同性别之间的比较。1991年Achenbach对CBCL再次进行修订，将年龄范围扩大到18岁，分为4-11岁、12-18岁男女四个年龄常模，不同年龄、性别统一使用相同的因子名称和项目组成。并且将教师报告表和青少年自我报告表的因子名称改为和CBCL一致，这样就可以从父母、教师和儿童自己三个方面获得信息。
CBCL是美国最常用的儿童行为评定量表之一，可以用于流行学调查/临床行为评定，也可以用于追踪治疗效果。该量表被荷兰、加拿大等国家引进及广泛应用，进行了一系列跨文化研究，一致认为其信度、效度较好。苏林雁以1991年版为蓝本，在湖南省城乡采样，制订了湖南常模。"""

# scales
scales = [u'参加体育运动',u'参加爱好活动',u'参加爱好小组（团体）',
          u'参加家务劳动',u'交往',u'与人相处',u'在校学习',u'行为问题',]
instruction = u'请根据您的孩子的情况，真实地填写下列内容。'

items = {
    "1":u'请列出您的孩子最喜欢的体育运动，如游泳、乒乓球、篮球、足球、骑车和跑步等。',
    "2":u'与其他同年龄的孩子比较，您的孩子花在这些体育运动上的时间是多还是少？',
    "3":u'与其他同年龄的孩子比较，您的孩子在这些体育运动上做得如何？',
    }
rating = [
    [u'不喜欢任何体育运动',u'喜欢一种',u'喜欢两种',u'喜欢三种或以上'],
    [u'不知道',u'较少',u'一样',u'较多'],
    [u'不知道',u'较差',u'一样',u'较好'],
    ]
score_rules = [None,0,1,2]

sports_scale = {
    'scale_name':scales[0],
    'instruction':instruction,
    'items':items,
    'rating':rating,
    'score_rules':score_rules 
    }

items = {
    "1":u'请列出您的孩子除体育运动之外最喜欢的爱好活动，例如集邮、看书、弹琴等，不包括看电视。',
    "2":u'与其他同年龄的孩子比较，您的孩子花在这些上爱好活动的时间是多还是少？',
    "3":u'与其他同年龄的孩子比较，您的孩子在这些爱好活动上做得如何？'   
    }
rating = [
    [u'没有任何爱好活动',u'一种爱好',u'两种爱好',u'三种或以上爱好'],
    [u'不知道',u'较少',u'一样',u'较多'],
    [u'不知道',u'较差',u'一样',u'较好'], 
    ]
score_rules = [None,0,1,2]

hobby_scale = {
    'scale_name':scales[1],
    'instruction':instruction,
    'items':items,
    'rating':rating,
    'score_rules':score_rules
    }

items = {
    "1":u'请列出您的孩子参加的课外组织、训练团队或团体的名称，如乐团、书画社、足球队等。',
    "2":u'与其他同年龄的孩子比较，您的孩子参加这些团体活动的时间是多还是少？', 
    }
rating = [
    [u'未参加任何团体',u'参加一种团体',u'参加两种团体',u'参加三种或以上团体'],
    [u'不知道',u'较少',u'一样',u'较多'],
    ]
score_rules = [None,0,1,2]

society_scale = {
    'scale_name':scales[2],
    'instruction':instruction,
    'items':items,
    'rating':rating,
    'score_rules':score_rules
    }

items = {
    "1":u'请列出您的孩子承担的家务劳动，如看小孩、整理床铺、扫地、倒垃圾等。',
    "2":u'与其他同年龄的孩子比较，您的孩子做家务劳动的质量如何？',
    }
rating = [
    [u'不做任何家务',u'做一种',u'做两种',u'做三种或以上'],
    [u'不知道',u'较差',u'一样',u'较好'],  
    ]
score_rules = [None,0,1,2]

housework_scale = {
    'scale_name':scales[3],
    'instruction':instruction,
    'items':items,
    'rating':rating,
    'score_rules':score_rules
    }

items = {
    "1":u'您的孩子有多少好朋友？',
    "2":u'您的孩子每周有多少次与其他的小朋友在一起活动？',
    }
rating = [
    [u'少于一个',u'二到三个',u'四个以上'],
    [u'少于一次',u'二次',u'三次以上'],    
    ]
score_rules = [0,1,2]

friends_scale = {
    'scale_name':scales[4],
    'instruction':instruction,
    'items':items,
    'rating':rating,
    'score_rules':score_rules
    }

items = {
    "1":u'与其他同年龄的孩子比较，您的孩子与兄弟姐妹和睦相处的情况如何？',
    "2":u'与其他同年龄的孩子比较，您的孩子与其他小孩和睦相处的情况如何？',
    "3":u'与其他同年龄的孩子比较，您的孩子在父母跟前的行为如何？', 
    "4":u'与其他同年龄的孩子比较，您的孩子独自玩耍或做事的情况如何？'   
    }
rating = [u'较差',u'差不多',u'较好']
score_rules = [0,1,2]

get_along_scale = {
    'scale_name':scales[5],
    'instruction':instruction,
    'items':items,
    'rating':rating,
    'score_rules':score_rules
    }

items = {
    "1":u'您的孩子是否在一个特殊班级？',
    "2":u'您的孩子留过级吗？',
    "3":u'您的孩子在学校里有学习或其他方面的问题吗？'   
    }
rating = [
    [u'是',u'不是'],
    [u'留过',u'没有留过'],
    [u'有',u'没有'],    
    ]
score_rules = [None,0,1,2]

item4 = {
    '4a':u'与班上同学比较，您的孩子最近在学校的成绩，例如语文、数学、英语和其他科目。其中，语文成绩如何？',
    '4b':u'与班上同学比较，您的孩子最近在学校的成绩，例如语文、数学、英语和其他科目。其中，数学成绩如何？',
    '4c':u'与班上同学比较，您的孩子最近在学校的成绩，例如语文、数学、英语和其他科目。其中，英语成绩如何？',
    '4d':u'与班上同学比较，您的孩子最近在学校的成绩，例如语文、数学、英语和其他科目。其中，其他科目成绩如何？',
    }
rating4 = [u'不及格',u'较低',u'中等',u'较高']
score_rules4 = [0,1,2,3]

school_scale = {
    'scale_name':scales[6],
    'instruction':instruction,
    'items':items,
    'rating':rating,
    'score_rules':score_rules,
    'item4':item4,
    'rating4':rating4,
    'score_rules4':score_rules4,
    }

instruction = u'请根据您的孩子最近6个月的表现填写下表，凡是非常明显或常常出现的行为选择“明显”，如果有时出现或者有一点的行为选择“有点”，如果根本不出现的行为选择“无”。'
scale_name = scales[-1]
with open('CBCL.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for line in lines:
    key,value = line.strip().split('.')
    items[key] = value

reverse_items = []
scales = [u'退缩',u'躯体主诉',u'焦虑/抑郁',u'社交问题',u'思维问题',u'注意问题',
          u'违纪行为',u'攻击性行为',u'性问题(4~11岁男/女)',]
scales_items = [
    [42,65,69,75,80,88,102,103,11],# 退缩
    [51,54,'56a','56b','56c','56d','56e','56f','56g'], # 躯体主诉
    [12,14,31,32,33,34,35,45,50,52,71,89,103,112], # 焦虑/抑郁
    [1,11,25,38,48,55,62,64],# 社交问题
    [9,40,66,70,80,84,85],# 思维问题
    [1,8,10,13,17,41,45,46,61,62,80],# 注意问题
    [26,39,43,63,67,72,81,82,90,96,101,105,106],# 违纪行为
    [3,7,16,19,20,21,22,23,27,37,57,68,74,86,87,93,94,95,97,104],# 攻击性行为
    [5,59,60,73,110], # 性问题   
    ]
check = []
for l in scales_items:
    check = check+l
print(len(check))

factors = [u'内化性行为',u'外化性行为',]
factors_scales = [[u'退缩',u'躯体主诉',u'焦虑/抑郁'],[u'违纪行为',u'攻击性行为']]
rating = [u'无',u'有点',u'明显',]
score_rules = [0,1,2]

behavior_scale = {
    'scale_name':scale_name,
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

contents = {
    'sports_scale':sports_scale,
    'hobby_scale':hobby_scale,
    'society_scale':society_scale,
    'housework_scale':housework_scale,
    'friends_scale':friends_scale,
    'get_along_scale':get_along_scale,
    'school_scale':school_scale,
    'behavior_scale':behavior_scale,
    }

implementation = u"""量表要求父母或与儿童密切接触的监护人填写。如果家长填写有困难，可以由调查者读给家长听并记录其答案。"""

reliability = u"""湖南常模数据显示，社交能力、社交问题、思维问题，4-11岁男/女性问题分量表、女性违纪行为的内部一致性较差，其余都达到中度以上相关。间隔三个月的重测信度，社会能力总分r=0.79，行为问题总分r=0.77。"""
validity = u"""湖南常模数据显示，内容效度、平行效度、结构效度都比较理想。CBCL对行为障碍和情绪障碍有较好的鉴别能力。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""CBCL所评估的内容包括社会能力和行为问题两部分。
社会能力由七部分组成（注意：为了简化编程，对相关题目进行了改造），计分规则如下所述：
1）参加体育运动：第1条条目选择“不喜欢任何体育运动”时，该项总分为零。否则，总分=第1条条目分+第2，3条目平均分。最高4分。
2）参加爱好活动：第1条条目选择“没有任何爱好活动”时，该项总分为零。否则，总分=第2条条目分。最高2分。
3）参加爱好小组（团体）：计分方法与1）相同。最高4分。
4）参加家务劳动：计分方法与1）相同。最高4分。
5）交往：最高分4分。
6）与人相处：总分=第1，2，3条目平均分+第4条条目分。最高分4分。
7）在校学习：总分=第1，2，3条条目分+第4条(4a,4b,4c,4d)条目平均分。最高分6分。
行为问题计分规则如下所述：
内化性行为分数=退缩分数+躯体主诉分数+焦虑/抑郁分数-第103条条目分
外化性行为分数=违纪行为分数+攻击性行为分数
行为问题总分：第2条条目和第4条条目不参与计分。将118条条目分相加则得到总分。"""

applications = u"""由湖南常模分别给出了社会能力和行为问题总分的划界分。社会能力部分在我国信效度不够理想，与我国国情相关，得分仅供参考。CBCL（1991）在国内已经用于各种科研项目，用于评估儿童ADHD、对立违抗障碍、品行障碍、焦虑障碍、抑郁障碍等。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)